class Spam():
    num_instances = 0

    @staticmethod
    def count():
        Spam.num_instances += 1

    def __init__(self):
        self.count()


class Sub(Spam):
    num_instances = 0
    pass


class Other(Spam):
    num_instances = 0
    pass


    # 每次 Spam 实例，Spam 的类变量 num_instances 就会加 1
x = Spam()  # 这时候 Spam 类变量 为 1
y1, y2 = Sub(), Sub()  # 两次实例 Sub，也就是两次实例 Spam。这时候 Spam 类变量为 3。但 Sub 独立的类变量初始化为 0

# 类似，三次实例 Other ，也就是三次实例 Spam，所以 Spam 类变量为 6 。z1 z2 z3 每次都初始化类变量为 0
z1, z2, z3 = Other(), Other(), Other()

# 因为 x 是 Spam 的实例，x.num_instances 指向对应类 Spam 的类变量
print(x.num_instances, y1.num_instances, z1.num_instances)   # 6 0 0
print(Spam.num_instances, Sub.num_instances, Other.num_instances)  # 6 0 0
